from datetime import datetime,timedelta

# 定义两个日期
l = datetime(2000, 1, 1)
r = datetime(2022, 2, 11)
# 计算日期差
day = r - l
print(day.days)  # 输出两个日期之间的天数

#计算两个日期之间有多少个特定的星期几
# 定义时间间隔（1天）
delta = timedelta(days=1)
monday_count=0
# 遍历日期范围
while l <= r:
    if l.weekday() == 0:  # 0 表示星期一
        monday_count += 1
    l += delta  # 每次增加一天
print(f"从 {l.strftime('%Y-%m-%d')} 到 {r.strftime('%Y-%m-%d')} 之间有 {monday_count} 个星期一")

a=datetime(2024,3,1)
b=datetime(2024,3,13)
# 遍历日期范围
while a <= b:
    print(a.strftime('%Y-%m-%d'))  # 格式化输出日期
    a += delta


# 优化遍历性能
#如果日期范围非常大（例如几十年），直接逐天遍历可能会比较慢。可以通过数学计算来优化
from datetime import datetime, timedelta

# 定义两个日期 
start_date = datetime(2000, 1, 1)
end_date = datetime(2022, 2, 11)

# 计算第一个星期一
first_monday = start_date + timedelta(days=(7 - start_date.weekday()) % 7)

# 计算完整周数
complete_weeks = (end_date - first_monday).days // 7

print(f"从 {start_date.strftime('%Y-%m-%d')} 到 {end_date.strftime('%Y-%m-%d')} 之间有 {complete_weeks} 个完整周")
